\documentclass[a4paper,10pt,final,notitlepage,article]{article}

\usepackage[spanish]{babel}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{amsfonts}
\usepackage{graphicx}
\usepackage{epsfig}
\usepackage{epstopdf}
\usepackage{textcomp}
\usepackage{anysize}
\marginsize{3cm}{3cm}{2cm}{2cm}

\begin{document}

\title{Sistemas de Inteligencia Artificial \\ Redes de Hopfield \\ Trabajo Pr\'actico Especial 2 }

\author{Alan Idesis,\and Daniel Goldberg,\and M. Eugenia Cura}

\maketitle

\section*{Introducci\'on}
En este informe se describir\'a c\'omo se ha implementado una red de Hopfield que act\'ue como memoria asociativa direccionable por el contenido y los resultados obtenidos de esta implementaci\'on.

Para este trabajo se generar\'a la matriz de pesos correspondientes a los patrones que se desean memorizar. En este caso se tomar\'an como patrones las im\'agenes binarias provistas por la c\'atedra. 

Para analizar los resultados se verificar\'a:
\begin{itemize}
\item Si los patrones a memorizar son verdaderos atractores.
\item Qu\'e sucede con versiones ruidosas e incompletas de los patrones a memorizar.
\item Qu\'e sucede cuando se presentan patrones que no pertenecen al conjunto de patrones memorizados por la red.
\item Qu\'e sucede cuando se presenta a la red la versi\'on inversa de los patrones a memorizar.
\end{itemize}

\section*{Desarrollo}
En esta secci\'on se describir\'a el trabajo realizado al implementar la red de Hopfield. Se ha desarrollado el trabajo en el lenguaje de programaci\'on de \textit{Octave}. 

Como se ha mencionado anteriormente, se tomaron como patrones a memorizar las im\'agenes binarias provistas por la c\'atedra. Estas im\'agenes son todas de 64x64 pixels. Para leer las mismas se utiliz\'o la funci\'on \texttt{imread()} que, dada una imagen, devuelve la representaci\'on num\'erica de la misma en forma matricial. En nuestro caso, que las im\'agenes son blancas y negras, devuelve una matriz de 64x64 con un 0 o un 1, dependiendo de si el pixel en esa posici\'on era blanco o negro, respectivamente.
Esta matriz se transforma luego a un vector de 1x4096 utilizando la regla $2n-1$ para que los valores resulten en -1 y 1 por conveniencia mat\'ematica. Llamaremos $N=4096$ a la cantidad de neuronas en nuestra red. 

Siendo $p$ la cantidad de patrones a memorizar, para el c\'alculo de los pesos sin\'apticos entre las neuronas, se construye una matriz \textbf{P} de $p$x4096 donde cada fila es la representaci\'on vectorial de cada patr\'on a memorizar que se mencion\'o en el p\'arrafo anterior. Siendo \textbf{W} la matriz que representa los pesos sin\'apticos, se hace $\textbf{W}=\frac{\textbf{P}'x\textbf{P}}{N}$.

Para la etapa de inicializaci\'on se utiliza un patr\'on diferente en cada caso, dependiendo de lo que se quiera verificar. Este patr\'on ser\'a tomado como el estado inicial $S(0)$ de las neuronas en la red.

Para la etapa de iteraci\'on, se realizaron varias implementaciones diferentes. Llamaremos ciclo al conjunto de las $N$ iteraciones en el tiempo $t$ en las que se actualizan los estados de las neuronas $S(t)$. La primera implementaci\'on que se realiz\'o fue una actualizaci\'on asincr\'onica de las neuronas, donde se  genera un n\'umero aleatorio entre 1 y $N$ y se actualiza el estado de la neurona correspondiente. Esto se hace N veces y hace que pueda actualizarse en el mismo ciclo varias veces la misma neurona, mientras que otras se mantengan sin actualizar. La segunda implementaci\'on que se realiz\'o fue la del modelo de Little, donde la actualizaci\'on es sincr\'onica. La diferencia obtenida con la implementaci\'on anterior se ver\'a en la secci\'on de resultados. La \'ultima implementaci\'on realizada fue la actualizaci\'on asincr\'onica donde, en cada iteraci\'on del ciclo, se actualiza una neurona diferente a cualquiera de las anteriores. De esta forma se actualizan todas las neuronas en un mismo ciclo.

Se realiza el corte de la etapa de iteraci\'on cuando $S(t)=S(t-1)$, acorde al modelo de Hopfield. Es decir, cuando el estado de las neuronas en el tiempo $t$ es igual al estado en el tiempo $t-1$.

\section*{Resultados}

\subsection*{Atractores}
Para realizar esta verificaci\'on se le dieron a la red 3 patrones para que memorice y luego se inicializ\'o la misma con cada uno de ellos. Esto se realiz\'o con todas las im\'agenes de nuestro conjunto.

Se tomaban subconjuntos de a 3, 4 o 5 patrones ya que con m\'as se comenzaban a generar estados esp\'ureos de segunda clase. Un ejemplo de lo que sucede se puede observar en la Figura 1. 

Se pueden observar algunos de los resultados obtenidos para esta verificaci\'on en las im\'agenes 3 y 4. En la Figura 2 se puede ver la diferencia con la Figura 1 que, solamente omitiendo un patr\'on para memorizar, cambia radicalmente el resultado. Cuando el estado final de la red es equivalente al patr\'on con el cual se inicializ\'o la misma, el cual es uno de los que se le di\'o para memorizar, se verifica que el patr\'on a memorizar es un verdadero atractor. Esto result\'o en todos los casos probados (excepto en el caso de las letras, ver en la secci\'on \textit{Otros casos}).


\subsection*{Versiones ruidosas o incompletas de los patrones memorizados}
Para esta verificaci\'on se tomaron subconjuntos de patrones y se inicializ\'o la red con una versi\'on ruidosa o incompleta de alguno de ellos. Los resultados obtenidos en la mayor\'ia de los casos fueron acordes a lo que se esperaba, es decir, se demuestra que la red ha memorizado los patrones, y la versi\'on ruidosa de alguno de ellos da como resultado el patr\'on original. Ver im\'agenes 5 y 6. En algunos casos sin embargo, cuando la cantidad de patrones a memorizar era muy grande, o las im\'agenes eran muy parecidas en ciertas partes, el resultado obtenido era una mezcla de varias im\'agenes. Ver im\'agenes 7 y 8.

Algo a remarcar es que, en los casos en los que se obten\'ian resultados en los que parec\'ia que la red no hab\'ia memorizado los patrones, si se repet\'ia uno de los patrones a memorizar, es decir, se le daba m\'as \textgravedbl peso\textacutedbl  a este patr\'on, resultaba en que la red parec\'ia memorizar mejor el patr\'on en cuesti\'on. Un ejemplo es la Figura 9, que es el mismo caso que la Figura 7 pero con la imagen de los auriculares repetida.

Lo mismo sucede con versiones incompletas de los patrones a memorizar. Lo que puede suceder aqu\'i es que como se puede ver en la imagen 10, la parte que falta en la imagen puede resultar en que la red devuelva otro de los patrones que memoriz\'o. En este caso se inicializ\'o la red con una computadora a la que le falta parte del teclado. Aunque se puede ver que la red hab\'ia memorizado tanto la computadora como el celular, la parte incompleta de la computadora resulta en que el estado final de la red caiga para el lado del celular. Sin embargo, con la misma inicializaci\'on, pero con diferentes patrones memorizados, como el caso de la Figura 11, el estado final de la red es la computadora. Esto tiene que ver con las partes en las cuales los patrones que memoriza la red se parecen. En el primer caso, con la antena como tercer par\'ametro, la red pareciera que genera atractores que son muy diferentes a los que genera la l\'inea situada a la izquierda como tercer par\'ametro.

En esta parte del trabajo fue cuando vimos la mayor diferencia entre el modelo de Little y el de Hopfield. Para ambas implementaciones se presentaron dos c\'irculos a memorizar. Un c\'irculo era el espejo del otro horizontalmente. Se inicializ\'o la red con una imagen de una superposici\'on de ambos c\'irculos. La salida de la implementaci\'on del modelo de Little fue, como se puede ver en la Figura 12, un ciclo de longitud 2 del cual la red no pod\'ia salir. Por el otro lado, en la implementaci\'on del modelo de Hopfield, el resultado fue, aleatoriamente, o un c\'irculo o el otro. Esto se puede ver en las figuras 13 y 14.


\subsection*{Patrones que no pertenecen al conjunto de patrones memorizados}
Estos resultados se pueden observar en las Figuras 15, 16 y 17. En la 16 y 17 se puede observar la diferencia entre la versi\'on asincr\'onica y la sincr\'onica respectivamente. Se ve que llegan al mismo resultado pero la sincr\'onica llega en menos cantidad de tiempos. En casi todos los resultados se ve que si se inicializa con un patr\'on que no pertenece al conjunto de patrones memorizados, la red devuelve una mezcla entre todos los que memoriz\'o, aunque el resultado no tenga ninguna similitud con el patr\'on que se inicializ\'o, como se ve en las figuras 16 y 17 que es un c\'irculo izquierdo, y el resultado es un dibujo de algo en la parte derecha.

En otros casos sin embargo, la salida no es una mezcla, sino uno de los patrones que se memoriz\'o. Ver Figura 18. La diferencia con el caso anterior se puede explicar ya que con ciertos patrones se crean estado esp\'ureos en los cuales la red puede caer. Esto depende de los patrones que se han memorizado.

Si lo memorizado es un \'unico patr\'on, y se inicializa con uno completamente diferente, la salida es el patr\'on memorizado. Ver Figura 19.

\subsection*{Versi\'on inversa de los patrones a memorizar}
En estos casos los resultados son siempre el inverso al patr\'on que se ha memorizado. A\'un cuando el inverso con el cual se inicializa tiene ruido, como se puede ver en las Figuras 20 y 21, la salida de la red es el inverso del patr\'on memorizado correspondiente. Otro resultado se puede ver en la figura 22, en la que se ve como, aunque la inicializaci\'on sea una imagen completamente negra, existe un atractor que hace que la red devuelva el inverso del micr\'ofono.

\subsection*{Otros casos}
Otro caso que se tom\'o en cuenta fue el de las letras. Las im\'agenes disponibles para esto fueron las letras \textit{A}, \textit{H} y \textit{F}, donde \textit{A} y \textit{H} son iguales a excepci\'on de la raya horizontal que une los dos palos verticales en la \textit{A}. Se realizaron varias pruebas. Dado que la \textit{F} tiene un corrimiento con respecto a la posici\'on de las otras, no suma mucho en las pruebas hechas. Es muy interesante ver como, aunque la \textit{A} est\'e dentro del conjunto de im\'agenes memorizadas, si se inicializa la red con la \textit{A}, el resultado de la red va a ser la \textit{H}. Ver figura 23. 


\section*{Conclusiones}

\subsection*{Atractores}

En esta secci\'on del trabajo llegamos a la conclusi\'on que cuando la red intenta memorizar muchos patrones, se comienzan a crear otro tipo de atractores. Estos atractores son estados estables, llamados estados esp\'ureos, que no son ninguno de los patrones que la red tuvo que memorizar, sino una mezcla de ellos.

En los casos en los que se inicializa con uno de los patrones que la red ha memorizado, y esta devuelve el mismo patr\'on, se logra verificar que efectivamente ese patr\'on es un verdadero atractor del sistema.

\subsection*{Versiones ruidosas o incompletas de los patrones memorizados}
En esta secci\'on llegamos a varias conclusiones. La primera es que cuando se inicializa la red con un patr\'on que se memoriz\'o, pero con ruido o incompleto, en la mayor\'ia de los casos, la red devolver\'a el patr\'on original. Esto demuestra, de la misma forma que la secci\'on anterior, que al memorizar patrones, la red genera estas cuencas de atracci\'on a donde \textgravedbl cae\textacutedbl el estado de la red. Sin embargo, como se ha visto en muchos otros casos, cuando la cantidad de patrones que debe memorizar la red es muy grande, o los patrones contienen muchas similitudes (mismo bit en la misma posici\'on), la red genera otras cuencas de atracci\'on, a donde la red puede ir evolucionando su estado. Estos estados son mezcla de los estados generados directamente por cada uno de los patrones memorizados por la red.

En cuanto a los resultados obtenidos por la repetici\'on de alguno de los patrones a memorizar, llegamos a la conclusi\'on que el cuenca de atracci\'on que se genera para el patr\'on repetido es un m\'inimo a\'un menor que el resto en la funci\'on de energ\'ia. 

Analizando los resultados obtenidos de las versiones incompletas llegamos a la conclusi\'on de que hay atractores que se generan y son una representaci\'on de las partes que m\'as tienen en com\'un los patrones memorizados. Pareciera que se generan cuencas de atracci\'on que representan las intersecciones de los patrones memorizados.

\subsection*{Patrones que no pertenecen al conjunto de patrones memorizados}
No pudimos extraer muchas conclusiones de esta secci\'on. La \'unica que vale la pena remarcar es que no siempre la red evoluciona a un estado parecido al que se inicializ\'o la red. No pudimos encontrar una estandarizaci\'on de que es lo que sucede con los patrones que no pertenecen al conjunto de patrones memorizados. Cuando la cantidad de patrones memorizados es poca (menor a 3), la red evoluciona a alguno de ellos (pareciera que al que m\'as se le parace). Cuando la cantidad de patrones es menor, evoluciona a un estado mezcla, en muchos casos a uno que no tiene similitud alguna con el estado de inicializaci\'on.

\subsection*{Versi\'on inversa de los patrones a memorizar}
En esta secci\'on pudimos demostrar que cuando se memoriza un patr\'on, se memoriza el inverso, y este se convierte en un nuevo atractor. Al probar cualquiera de las configuraciones mencionadas a lo largo del trabajo, pero inicializando la red con el inverso del patr\'on, se llega al resultado inverso del resultado original.

\subsection*{Otras conclusiones}
Al haber implementado ambos modelos, el de Little y el de Hopfield vimos que la mayor diferencia es la cantidad de tiempos. En el modelo de Little, en la mayor\'ia de los casos se llega al resultado en pocos cambios de estado. Por otro lado, en casos como el que se mostr\'o en la Figura 12, se pueden generar ciclos, sin llegar a ningun resultado estable. En el modelo de Hopfield, la red evoluciona una mayor cantidad de veces hasta llegar a un estado fijo, pero dado que evolucionan las neuronas de a una a la vez y no en conjunto, se evitan los ciclos que se pueden generar en el modelo de Little.

En conclusi\'on a las pruebas generadas con las letras ....

\newpage
\section*{Anexo}


\begin{figure}[h]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/30/result.png}
        \caption{6 patrones a memorizar, salida mezcla}
			\label{1}
	\end{center}
\end{figure}

\begin{figure}[h]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/29/result.png}
        \caption{5 patrones a memorizar, salida correcta}
			\label{2}
	\end{center}
\end{figure}

\begin{figure}[h]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/31/result.png}
        \caption{Menos patrones a memorizar, salida correcta}
			\label{3}
	\end{center}
\end{figure}

\begin{figure}[h]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/32/result.png}
        \caption{Menos patrones a memorizar, salida correcta}
			\label{4}
	\end{center}
\end{figure}

\begin{figure}[h]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/26/result.png}
        \caption{Inicializaci\'on con ruido (imagen invertida), pocos patrones a memorizar}
			\label{5}
	\end{center}
\end{figure}

\begin{figure}[h]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/33/result.png}
        \caption{Inicializaci\'on con ruido}
			\label{6}
	\end{center}
\end{figure}

\begin{figure}[h]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/19/result.png}
        \caption{Inicializaci\'on con ruido, muchos patrones a memorizar}
			\label{7}
	\end{center}
\end{figure}

\begin{figure}[h]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/27/result.png}
        \caption{Inicializaci\'on con ruido (imagen invertida)}
			\label{8}
	\end{center}
\end{figure}

\begin{figure}[h]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/34/result.png}
        \caption{Inicializaci\'on con ruido, muchos patrones a memorizar, repetido con el cual inicializo}
			\label{9}
	\end{center}
\end{figure}

\begin{figure}[h]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/41/result.png}
        \caption{Inicializaci\'on incompleta}
			\label{10}
	\end{center}
\end{figure}

\begin{figure}[h]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/42/result.png}
        \caption{Inicializaci\'on incompleta}
			\label{11}
	\end{center}
\end{figure}
\clearpage
\begin{figure}[h]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/9/result.png}
        \caption{Modelo Little}
			\label{12}
	\end{center}
\end{figure}
\begin{figure}[h]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/12/result.png}
        \caption{Modelo Hopfield}
			\label{13}
	\end{center}
\end{figure}
\begin{figure}[h]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/14/result.png}
        \caption{Modelo Hopfield}
			\label{14}
	\end{center}
\end{figure}
\begin{figure}[h]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/36/result.png}
        \caption{Inicializaci\'on diferente a lo memorizado}
			\label{15}
	\end{center}
\end{figure}
\begin{figure}[h]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/18/result.png}
        \caption{Inicializaci\'on diferente a lo memorizado}
			\label{16}
	\end{center}
\end{figure}
\begin{figure}[h]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/2/result.png}
        \caption{Inicializaci\'on diferente a lo memorizado (sincr\'onico)}
			\label{17}
	\end{center}
\end{figure}

\begin{figure}[h]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/43/result.png}
        \caption{Inicializaci\'on diferente a lo memorizado}
			\label{18}
	\end{center}
\end{figure}

\begin{figure}[h]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/37/result.png}
        \caption{Inicializaci\'on diferente a lo memorizado (1 solo patr\'on)}
			\label{19}
	\end{center}
\end{figure}

\begin{figure}[h]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/16/result.png}
        \caption{Patr\'on invertido con ruido}
			\label{20}
	\end{center}
\end{figure}

\begin{figure}[h]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/44/result.png}
        \caption{Patr\'on invertido}
			\label{21}
	\end{center}
\end{figure}
\begin{figure}[h]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/45/result.png}
        \caption{Patr\'on invertido}
			\label{22}
	\end{center}
\end{figure}

\begin{figure}[h]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/38/result.png}
        \caption{Letras}
			\label{23}
	\end{center}
\end{figure}

\end{document}
